#ifndef __GENERADOR_PLAN_DE_CARRERA_H__
#define __GENERADOR_PLAN_DE_CARRERA_H__

#include "AplicadorRestriccionesDeterministicas.h"
#include "AplicadorRestriccionesNoDeterministicas.h"
#include "PriorizadorMateriasFIUBA.h"

using namespace controlador;

namespace modelo {

	struct ComparadorPorPrioridad {
      bool operator()(const MateriaPriorizada* unaMateria, const MateriaPriorizada* otraMateria) {
		  return *unaMateria < *otraMateria;
      }
    };

	class GeneradorPlanDeCarrera
	{
	public:
		GeneradorPlanDeCarrera(ContextoDeEjecucion* contexto);
		~GeneradorPlanDeCarrera(void);

		PlanDeCarrera* GenerarPlan(ActualizadorPantallaCommand* actualizadorPantallaCommand);

	private:
		PriorizadorMaterias* priorizadorMaterias;
		ContextoDeEjecucion* contexto;
		AplicadorRestriccionesDeterministicas* aplicadorRestriccionesDeterministicas;
		AplicadorRestriccionesNoDeterministicas* aplicadorRestriccionesNoDeterministicas; 
	};

}

#endif